package com.inei.evaluaciondelaencuesta.view;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Locale;
import android.app.Activity;
import android.app.DatePickerDialog;
import android.app.TimePickerDialog;
import android.app.TimePickerDialog.OnTimeSetListener;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.TimePicker;
import android.widget.Toast;
import com.inei.evaluaciondelaencuesta.R;
import com.inei.evaluaciondelaencuesta.controller.RespuestaEncuestaController;
import com.inei.evaluaciondelaencuesta.model.entity.RespuestaEncuesta;
import com.inei.evaluaciondelaencuesta.tools.SpinnerUtil;

public class Encuesta_I_Activity extends Activity {

	// variables componentes
	private Spinner spCompPresentacion, spErrorC1_1, spErrorC1_2, spErrorC1_3,
			spErrorC1_4, spErrorC1_5, spErrorC1_6, spErrorC1_7, spLectura16,
			spComprension16, spOtro16, spError16, spLectura18, spComprension18,
			spOtro18, spError18;
	private EditText etOtro16, etOtro18, etHIPre, etHTPre, etTpre, etHICap,
			etHTCap, etTCap, etOBSC1_1, etOBSC1_2, etOBSC1_3, etOBSC1_4,
			etOBSC1_5, etOBSC1_6, etOBSC1_7, etPregunta16, etOBS16, etOBS18,
			etPregunta18;
	private SpinnerUtil util;

	// variables
	private RespuestaEncuestaController con;
	private List<RespuestaEncuesta> lista;
	private int marco_id, formato_id;
	private String conglomerado, grupo, vivienda, hogar_id;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_encuesta_i);

		con = new RespuestaEncuestaController(Encuesta_I_Activity.this);
		util = new SpinnerUtil(this);

		IniciarComponentes();

		AgregarEventos();

		CargarDatos();
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		getMenuInflater().inflate(R.menu.encuesta_i, menu);
		return super.onCreateOptionsMenu(menu);
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {

		switch (item.getItemId()) {
		case R.id.mnGuardar:
			GuardarDatos();
			if (lista.get(0).getRespuesta_id() > 0) {
				if (con.RespuestaEncuestaModificar(lista) > 0) {
					Intent ir_encuesta_persona = new Intent(
							Encuesta_I_Activity.this,
							Encuesta_Persona_Activity.class);
					Bundle datos = getIntent().getExtras();
					datos.putInt("viene", 4);
					ir_encuesta_persona.putExtras(datos);
					startActivity(ir_encuesta_persona);

					Toast.makeText(this, "Se actualizo con exito",
							Toast.LENGTH_SHORT).show();
					finish();
				} else {
					Toast.makeText(this, "Error al actualizar",
							Toast.LENGTH_SHORT).show();
				}
			} else {
				if (con.RespuestaEncuestaAdicionar(lista) > 0) {
					Intent ir_encuesta_persona = new Intent(
							Encuesta_I_Activity.this,
							Encuesta_Persona_Activity.class);
					Bundle datos = getIntent().getExtras();
					datos.putInt("viene", 4);
					ir_encuesta_persona.putExtras(datos);
					startActivity(ir_encuesta_persona);

					Toast.makeText(this, "Se guardo con exito",
							Toast.LENGTH_SHORT).show();
					finish();
				} else {
					Toast.makeText(this, "Error al guardar", Toast.LENGTH_SHORT)
							.show();
				}
			}
			break;
		case R.id.mnSalir:
			finish();
			break;
		default:
			break;
		}
		return super.onOptionsItemSelected(item);
	}

	@Override
	public void onBackPressed() {
		Intent ir_encuesta = new Intent(Encuesta_I_Activity.this,
				Encuesta_Activity.class);
		Bundle datos = getIntent().getExtras();
		ir_encuesta.putExtras(datos);
		startActivity(ir_encuesta);
		finish();
		super.onBackPressed();
	}

	private void IniciarComponentes() {
		spCompPresentacion = (Spinner) findViewById(R.id.spCompPresentacion);

		spErrorC1_1 = (Spinner) findViewById(R.id.spErrorC1_1);
		spErrorC1_2 = (Spinner) findViewById(R.id.spErrorC1_2);
		spErrorC1_3 = (Spinner) findViewById(R.id.spErrorC1_3);
		spErrorC1_4 = (Spinner) findViewById(R.id.spErrorC1_4);
		spErrorC1_5 = (Spinner) findViewById(R.id.spErrorC1_5);
		spErrorC1_6 = (Spinner) findViewById(R.id.spErrorC1_6);
		spErrorC1_7 = (Spinner) findViewById(R.id.spErrorC1_7);

		spLectura16 = (Spinner) findViewById(R.id.spLectura16);
		spComprension16 = (Spinner) findViewById(R.id.spComprension16);
		spOtro16 = (Spinner) findViewById(R.id.spOtro16);
		etOtro16 = (EditText) findViewById(R.id.etOtro16);
		ocultar(etOtro16);
		spError16 = (Spinner) findViewById(R.id.spError16);

		spLectura18 = (Spinner) findViewById(R.id.spLectura18);
		spComprension18 = (Spinner) findViewById(R.id.spComprension18);
		spOtro18 = (Spinner) findViewById(R.id.spOtro18);
		etOtro18 = (EditText) findViewById(R.id.etOtro18);
		ocultar(etOtro18);
		spError18 = (Spinner) findViewById(R.id.spError18);

		etHIPre = (EditText) findViewById(R.id.etHIPre);
		etHTPre = (EditText) findViewById(R.id.etHTPre);
		etTpre = (EditText) findViewById(R.id.etTPre);
		etHICap = (EditText) findViewById(R.id.etHICap);
		etHTCap = (EditText) findViewById(R.id.etHTCap);
		etTCap = (EditText) findViewById(R.id.etTCap);
		etOBSC1_1 = (EditText) findViewById(R.id.etOBSC1_1);
		etOBSC1_2 = (EditText) findViewById(R.id.etOBSC1_2);
		etOBSC1_3 = (EditText) findViewById(R.id.etOBSC1_3);
		etOBSC1_4 = (EditText) findViewById(R.id.etOBSC1_4);
		etOBSC1_5 = (EditText) findViewById(R.id.etOBSC1_5);
		etOBSC1_6 = (EditText) findViewById(R.id.etOBSC1_6);
		etOBSC1_7 = (EditText) findViewById(R.id.etOBSC1_7);
		etPregunta16 = (EditText) findViewById(R.id.etPregunta16);
		etOBS16 = (EditText) findViewById(R.id.etOBS16);
		etOBS18 = (EditText) findViewById(R.id.etOBS18);
		etPregunta18 = (EditText) findViewById(R.id.etPregunta18);

		util.spinnerLECTURA(spLectura16, spLectura18);
		util.spinnerCOMPRENSION(spCompPresentacion, spComprension16,
				spComprension18);
		util.spinnerOTROS(spOtro16, spOtro18);
		util.spinnerERRORES(spErrorC1_1, spErrorC1_2, spErrorC1_3, spErrorC1_4,
				spErrorC1_5, spErrorC1_6, spErrorC1_7, spError16, spError18);
	}

	private void CargarDatos() {
		marco_id = getIntent().getExtras().getInt("marco_id");
		formato_id = getIntent().getExtras().getInt("formato_id");
		conglomerado = getIntent().getExtras().getString("conglomerado");
		grupo = getIntent().getExtras().getString("grupo");
		vivienda = getIntent().getExtras().getString("vivienda");
		hogar_id = getIntent().getExtras().getString("hogar_id");

		lista = con.RespuestaEncuestaBuscarCap(marco_id, formato_id, 0,
				hogar_id);
		if (lista != null) {
			lista.addAll(con.RespuestaEncuestaBuscarCap(marco_id, formato_id,
					1, hogar_id));
		}

		if (lista != null) {
			spCompPresentacion.setSelection(Integer.parseInt(lista.get(0)
					.getP_COMPR()));

			if (lista.get(1).getP_IH() != null
					&& lista.get(1).getP_IM() != null) {
				etHIPre.setText(lista.get(1).getP_IH() + ":"
						+ lista.get(1).getP_IM());
			}
			if (lista.get(1).getP_FH() != null
					&& lista.get(1).getP_FM() != null) {
				etHTPre.setText(lista.get(1).getP_FH() + ":"
						+ lista.get(1).getP_FM());
			}
			etTpre.setText(lista.get(1).getP_TM() + "");

			if (lista.get(2).getP_FH() != null
					&& lista.get(2).getP_FM() != null) {
				etHICap.setText(lista.get(2).getP_IH() + ":"
						+ lista.get(2).getP_IM());
			}
			if (lista.get(2).getP_FH() != null
					&& lista.get(2).getP_FM() != null) {
				etHTCap.setText(lista.get(2).getP_FH() + ":"
						+ lista.get(2).getP_FM());
			}
			etTCap.setText(lista.get(2).getP_TM() + "");

			spErrorC1_1.setSelection(Integer
					.parseInt(lista.get(3).getP_ERROR()));
			etOBSC1_1.setText(lista.get(3).getP_OBS());

			spErrorC1_2.setSelection(Integer
					.parseInt(lista.get(4).getP_ERROR()));
			etOBSC1_2.setText(lista.get(4).getP_OBS());

			spErrorC1_3.setSelection(Integer
					.parseInt(lista.get(5).getP_ERROR()));
			etOBSC1_3.setText(lista.get(5).getP_OBS());

			spErrorC1_4.setSelection(Integer
					.parseInt(lista.get(6).getP_ERROR()));
			etOBSC1_4.setText(lista.get(6).getP_OBS());

			spErrorC1_5.setSelection(Integer
					.parseInt(lista.get(7).getP_ERROR()));
			etOBSC1_5.setText(lista.get(7).getP_OBS());

			spErrorC1_6.setSelection(Integer
					.parseInt(lista.get(8).getP_ERROR()));
			etOBSC1_6.setText(lista.get(8).getP_OBS());

			spErrorC1_7.setSelection(Integer
					.parseInt(lista.get(9).getP_ERROR()));
			etOBSC1_7.setText(lista.get(9).getP_OBS());

			// Capitulo I Pregunta 16
			CargarPregunta(10, spLectura16, spComprension16, spOtro16,
					etOtro16, etPregunta16, spError16, etOBS16);

			// Capitulo I Pregunta 18
			CargarPregunta(11, spLectura18, spComprension18, spOtro18,
					etOtro18, etPregunta18, spError18, etOBS18);
		}
	}

	private void AgregarEventos() {
		spOtro16.setOnItemSelectedListener(new OnItemSelectedListener() {

			@Override
			public void onItemSelected(AdapterView<?> adapter, View v, int pos,
					long arg3) {
				if (pos == 3) {
					mostrar(etOtro16);
				} else {
					ocultar(etOtro16);
				}
			}

			@Override
			public void onNothingSelected(AdapterView<?> adapter) {

			}
		});

		spOtro18.setOnItemSelectedListener(new OnItemSelectedListener() {

			@Override
			public void onItemSelected(AdapterView<?> adapter, View v, int pos,
					long arg3) {
				if (pos == 3) {
					mostrar(etOtro18);
				} else {
					ocultar(etOtro18);
				}
			}

			@Override
			public void onNothingSelected(AdapterView<?> adapter) {

			}
		});

		etHIPre.setFocusable(false);
		etHIPre.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				EditText et = (EditText) v;
				AbrirTime(et.getText().toString(), et, 0, "");
			}
		});

		etHTPre.setFocusable(false);
		etHTPre.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				EditText et = (EditText) v;
				AbrirTime(et.getText().toString(), et, 0, "");
			}
		});

		etHICap.setFocusable(false);
		etHICap.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				EditText et = (EditText) v;
				AbrirTime(et.getText().toString(), et, 0, "");
			}
		});

		etHTCap.setFocusable(false);
		etHTCap.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				EditText et = (EditText) v;
				AbrirTime(et.getText().toString(), et, 0, "");
			}
		});
	}

	private void GuardarDatos() {
		if (lista == null) {
			lista = new ArrayList<RespuestaEncuesta>();
			for (int i = 0; i < 12; i++) {
				RespuestaEncuesta x = new RespuestaEncuesta();
				x.setFormato_id(formato_id);
				x.setMarco_id(marco_id);
				x.setConglomerado(conglomerado);
				x.setGrupo(grupo);
				x.setVivienda(vivienda);
				x.setHogar(hogar_id);
				x.setTipo_reg("");
				x.setOrden("");
				lista.add(x);
			}
		}

		lista.get(0).setCap("0");
		lista.get(0).setTipo("3");
		lista.get(0).setCodigo("1");
		lista.get(0).setP_COMPR(
				spCompPresentacion.getSelectedItemPosition() + "");

		lista.get(1).setCap("0");
		lista.get(1).setTipo("1");
		lista.get(1).setCodigo("");
		if (etHIPre.getText().toString().length() != 0) {
			String[] i1 = etHIPre.getText().toString().split(":");
			lista.get(1).setP_IH(i1[0]);
			lista.get(1).setP_IM(i1[1]);
		} else {
			lista.get(1).setP_IH(null);
			lista.get(1).setP_IM(null);
		}
		if (etHTPre.getText().toString().length() != 0) {
			String[] i1 = etHTPre.getText().toString().split(":");
			lista.get(1).setP_FH(i1[0]);
			lista.get(1).setP_FM(i1[1]);
		} else {
			lista.get(1).setP_FH(null);
			lista.get(1).setP_FM(null);
		}
		lista.get(1).setP_TM(
				etTpre.getText().toString().length() == 0 ? 0 : Integer
						.parseInt(etTpre.getText().toString()));

		lista.get(2).setCap("1");
		lista.get(2).setTipo("1");
		lista.get(2).setCodigo("");
		if (etHICap.getText().toString().length() != 0) {
			String[] i1 = etHICap.getText().toString().split(":");
			lista.get(2).setP_IH(i1[0]);
			lista.get(2).setP_IM(i1[1]);
		} else {
			lista.get(2).setP_IH(null);
			lista.get(2).setP_IM(null);
		}
		if (etHTCap.getText().toString().length() != 0) {
			String[] i1 = etHTCap.getText().toString().split(":");
			lista.get(2).setP_FH(i1[0]);
			lista.get(2).setP_FM(i1[1]);
		} else {
			lista.get(2).setP_FH(null);
			lista.get(2).setP_FM(null);
		}
		lista.get(2).setP_TM(
				etTCap.getText().toString().length() == 0 ? 0 : Integer
						.parseInt(etTCap.getText().toString()));

		lista.get(3).setCap("1");
		lista.get(3).setTipo("3");
		lista.get(3).setCodigo("2");
		lista.get(3).setP_ERROR(spErrorC1_1.getSelectedItemPosition() + "");
		lista.get(3).setP_OBS(etOBSC1_1.getText().toString());

		lista.get(4).setCap("1");
		lista.get(4).setTipo("3");
		lista.get(4).setCodigo("3");
		lista.get(4).setP_ERROR(spErrorC1_2.getSelectedItemPosition() + "");
		lista.get(4).setP_OBS(etOBSC1_2.getText().toString());

		lista.get(5).setCap("1");
		lista.get(5).setTipo("3");
		lista.get(5).setCodigo("4");
		lista.get(5).setP_ERROR(spErrorC1_3.getSelectedItemPosition() + "");
		lista.get(5).setP_OBS(etOBSC1_3.getText().toString());

		lista.get(6).setCap("1");
		lista.get(6).setTipo("3");
		lista.get(6).setCodigo("5");
		lista.get(6).setP_ERROR(spErrorC1_4.getSelectedItemPosition() + "");
		lista.get(6).setP_OBS(etOBSC1_4.getText().toString());

		lista.get(7).setCap("1");
		lista.get(7).setTipo("3");
		lista.get(7).setCodigo("6");
		lista.get(7).setP_ERROR(spErrorC1_5.getSelectedItemPosition() + "");
		lista.get(7).setP_OBS(etOBSC1_5.getText().toString());

		lista.get(8).setCap("1");
		lista.get(8).setTipo("3");
		lista.get(8).setCodigo("7");
		lista.get(8).setP_ERROR(spErrorC1_6.getSelectedItemPosition() + "");
		lista.get(8).setP_OBS(etOBSC1_6.getText().toString());

		lista.get(9).setCap("1");
		lista.get(9).setTipo("3");
		lista.get(9).setCodigo("8");
		lista.get(9).setP_ERROR(spErrorC1_7.getSelectedItemPosition() + "");
		lista.get(9).setP_OBS(etOBSC1_7.getText().toString());

		lista.get(10).setCap("1");
		lista.get(10).setTipo("3");
		lista.get(10).setCodigo("16");
		lista.get(10).setP_LECTU(spLectura16.getSelectedItemPosition() + "");
		lista.get(10)
				.setP_COMPR(spComprension16.getSelectedItemPosition() + "");
		lista.get(10).setP_OTRO(spOtro16.getSelectedItemPosition() + "");
		lista.get(10).setP_OTRO_ESP(etOtro16.getText().toString());
		lista.get(10).setP_REFOR(etPregunta16.getText().toString());
		lista.get(10).setP_ERROR(spError16.getSelectedItemPosition() + "");
		lista.get(10).setP_OBS(etOBS16.getText().toString());

		lista.get(11).setCap("1");
		lista.get(11).setTipo("3");
		lista.get(11).setCodigo("18");
		lista.get(11).setP_LECTU(spLectura18.getSelectedItemPosition() + "");
		lista.get(11)
				.setP_COMPR(spComprension18.getSelectedItemPosition() + "");
		lista.get(11).setP_OTRO(spOtro18.getSelectedItemPosition() + "");
		lista.get(11).setP_OTRO_ESP(etOtro18.getText().toString());
		lista.get(11).setP_REFOR(etPregunta18.getText().toString());
		lista.get(11).setP_ERROR(spError18.getSelectedItemPosition() + "");
		lista.get(11).setP_OBS(etOBS18.getText().toString());
	}

	private void CargarPregunta(int pos, Spinner spL, Spinner spC, Spinner spO,
			EditText etOT, EditText etP, Spinner spE, EditText etOB) {
		spL.setSelection(Integer.parseInt(lista.get(pos).getP_LECTU()));
		spC.setSelection(Integer.parseInt(lista.get(pos).getP_COMPR()));
		spO.setSelection(Integer.parseInt(lista.get(pos).getP_OTRO()));
		etOT.setText(lista.get(pos).getP_OTRO_ESP());
		etP.setText(lista.get(pos).getP_REFOR());
		spE.setSelection(Integer.parseInt(lista.get(pos).getP_ERROR()));
		etOB.setText(lista.get(pos).getP_OBS());
	}

	private void mostrar(EditText et) {
		et.setVisibility(View.VISIBLE);

	}

	private void ocultar(EditText et) {
		et.setVisibility(View.GONE);
		et.setText("");
	}

	private void AbrirTime(String h, final EditText et, final int sw,
			final String h1) {

		final Calendar c = Calendar.getInstance();
		int horas = c.get(Calendar.HOUR_OF_DAY);
		int minutos = c.get(Calendar.MINUTE);
		if (h.length() != 0) {
			String valores[] = h.split(":");
			horas = Integer.parseInt(valores[0]);
			minutos = Integer.parseInt(valores[1]);
		}

		TimePickerDialog hora = new TimePickerDialog(this,
				new OnTimeSetListener() {

					@Override
					public void onTimeSet(TimePicker view, int hourOfDay,
							int minute) {
						c.set(Calendar.HOUR_OF_DAY, hourOfDay);
						c.set(Calendar.MINUTE, minute);
						SimpleDateFormat sdf = new SimpleDateFormat("HH:mm",
								Locale.US);
						et.setText(sdf.format(c.getTime()));
						if (et == etHIPre || et == etHTPre) {
							CalcularMinutos(etHIPre, etHTPre, etTpre);
						}
						if (et == etHICap || et == etHTCap) {
							CalcularMinutos(etHICap, etHTCap, etTCap);
						}
					}
				}, horas, minutos, true);

		hora.setButton(DatePickerDialog.BUTTON_NEUTRAL, "Borrar",
				new DialogInterface.OnClickListener() {

					@Override
					public void onClick(DialogInterface arg0, int arg1) {
						LimpiarTotales(et);
					}
				});
		hora.show();
	}

	private void CalcularMinutos(EditText eti, EditText ett, EditText tm) {
		int li = eti.getText().toString().length();
		int lt = ett.getText().toString().length();

		if (li != 0 && lt != 0) {
			String inicio = "00/00/0000 " + eti.getText().toString();
			String termino = "00/00/0000 " + ett.getText().toString();
			SimpleDateFormat formato = new SimpleDateFormat("dd/MM/yyyy HH:mm");
			try {
				Date ini = formato.parse(inicio);
				Date ter = formato.parse(termino);
				tm.setText((ter.getTime() - ini.getTime()) / 60000 + "");
			} catch (ParseException e) {
				e.printStackTrace();
			}
		}
	}

	private void LimpiarTotales(EditText et) {
		et.setText("");
		if (et == etHIPre || et == etHTPre) {
			etTpre.setText("");
		}
		if (et == etHICap || et == etHTCap) {
			etTCap.setText("");
		}
	}
}
